home *** CD-ROM | disk | FTP | other *** search
- // Gestionnaire de Integer gadget V0.28
- // (C) 1992 Christophe PASSUELLO
- // Tue Jan 26 14:17:59 1993
-
-
- #include <exec/types.h>
- #include <exec/memory.h>
- #include "mytypes.h"
- #define INTUITION_PREFERENCES_H 0
- #include <intuition/intuition.h>
- #include "IObject_priv.h"
-
-
- struct String
- {
- struct ObjectTMV *TMV;
- UWORD ObjectID;
- UWORD Flags;
- STRPTR LabelText;
- struct TextFont *Font;
- struct Window *window;
- struct Requester *requester;
- UWORD ClassFlags;
- struct Box BorderBox;
- struct Gadget Gadget;
- struct StringInfo StringInfo;
- UWORD MaxLength;
- };
-
- #define STRINGMAX 260
-
- #define LENGTHMAX 12
- struct Integer
- {
- struct ObjectTMV *TMV;
- UWORD ObjectID;
- UWORD Flags;
- STRPTR LabelText;
- struct TextFont *Font;
- struct Window *window;
- struct Requester *requester;
- UWORD ClassFlags;
- struct Box BorderBox;
- struct Gadget Gadget;
- struct StringInfo StringInfo;
- LONG MinInt;
- LONG MaxInt;
- LONG CurInt;
- UBYTE Buffer[LENGTHMAX];
- };
-
- #define LONG_MAX ((long)0x7FFFFFFF)
- #define LONG_MIN ((long)0x80000000)
-
- // Buffer Undo pour les entiers
- PRIVATE UBYTE Undo[STRINGMAX];
-
- // methodes generiques pour les StringObject
- PRIVATE VOID DisplayString(struct String *);
- PRIVATE VOID EraseString(struct String *);
- VOID OnStringObject(struct String *);
- PRIVATE VOID ActivateString(struct String *);
- PRIVATE VOID FreeString(struct String *);
-
- // methodes pour les Integer
- PRIVATE BOOL IntegerMsg(struct Integer *, struct IntuiMessage *);
- VOID ModifyInteger(struct Integer *, LONG, LONG, LONG);
- PRIVATE LONG IntegerValue(struct Integer *);
-
- // methodes pour les String
- PRIVATE BOOL StringMsg(struct String *, struct IntuiMessage *);
- PRIVATE VOID ModifyString(struct String *, STRPTR);
- PRIVATE STRPTR StringValue(struct String *);
-
-
- // TMV pour les Integers
- const static struct ObjectTMV IntegerMethod=
- {
- CLASS_INTEGER, sizeof(struct Integer),
- DisposeObject, IntegerMsg, AddObject, RemoveObject, DisplayString, EraseString,
- ModifyInteger, IntegerValue, OffObjectGad, OnStringObject, ActivateString
- };
-
-
- // TMV pour les String
- const static struct ObjectTMV StringMethod=
- {
- CLASS_STRING, sizeof(struct String),
- FreeString, StringMsg, AddObject, RemoveObject, DisplayString, EraseString,
- ModifyString, StringValue, OffObjectGad, OnStringObject, ActivateString
- };
-
-
- //
- // Initialise les gadgets de chaine
- //
- PRIVATE VOID InitStringObject(struct String *str, struct NewString *ns)
- {
- BOOL bord;
-
- InitObjectGad( (struct ObjectGad *) str, (struct NewObject *) ns);
-
- // ajuste la boite du gadget
- bord = (str->ClassFlags & STR_SINGLEBORD) ? TRUE : FALSE;
- AdjustBox( (struct Box *) &str->Gadget.LeftEdge, bord);
-
- // mettre un espace entre bordure et gadget
- AdjustBox( (struct Box *) &str->Gadget.LeftEdge, TRUE);
-
- str->Gadget.Flags = GADGHCOMP;
- str->Gadget.Activation = RELVERIFY;
-
- if (str->ClassFlags & STR_RIGHT)
- str->Gadget.Activation |= STRINGRIGHT;
- if (str->ClassFlags & STR_CENTER)
- str->Gadget.Activation |= STRINGCENTER;
-
- str->Gadget.GadgetType = STRGADGET;
- str->Gadget.SpecialInfo = &str->StringInfo;
- }
-
-
- //
- // Cree un Integer
- //
- struct Integer *CreateInteger(struct NewInteger *ni, UWORD ID)
- {
- struct Integer *in;
-
- if (in = (struct Integer *) AllocMem(sizeof(struct Integer), MEMF_PUBLIC|MEMF_CLEAR))
- {
- in->TMV = &IntegerMethod;
- in->ObjectID = ID;
-
- // recupere les champs de NewInteger
- InitStringObject( (struct String *) in, (struct NewString *) ni);
- in->Gadget.Activation |= LONGINT;
-
- // initialise le stringinfo
- in->StringInfo.Buffer = in->Buffer;
- in->StringInfo.UndoBuffer = Undo;
- in->StringInfo.Buffer[0] = 0;
-
- // initialise le nombre de car max
- in->StringInfo.MaxChars = 11;
- in->MaxInt = LONG_MAX;
- in->MinInt = LONG_MIN;
- }
- return(in);
- }
-
-
- //
- // Cree un String
- //
- struct String *CreateString(struct NewString *ns, UWORD ID)
- {
- struct String *str;
-
- if (str = (struct String *) AllocMem(sizeof(struct String), MEMF_PUBLIC|MEMF_CLEAR))
- {
- str->TMV = &StringMethod;
- str->ObjectID = ID;
-
- // recupere les champs de NewInteger
- InitStringObject( (struct String *) str, (struct NewString *) ns);
-
- // initialise le stringinfo
- if (str->StringInfo.Buffer = AllocMem(ns->MaxLength, MEMF_CLEAR|MEMF_PUBLIC))
- {
- if (ns->Text)
- strcpy(str->StringInfo.Buffer, ns->Text);
-
- str->StringInfo.UndoBuffer = Undo;
-
- // initialise le nombre de car max
- str->StringInfo.MaxChars = str->MaxLength = ns->MaxLength;
- }
- else
- {
- FreeString(str);
- str = NULL;
- }
- }
- return(str);
- }
-
-
- //
- // Libere le stringObject
- //
- PRIVATE VOID FreeString(struct String *str)
- {
- if (str)
- {
- if (str->StringInfo.Buffer)
- FreeMem(str->StringInfo.Buffer, str->MaxLength);
- DisposeObject(str)
- }
- }
-
-
- //
- // Renvoie l'etat de l'Integer
- //
- PRIVATE LONG IntegerValue(struct Integer *in)
- {
- return (in->CurInt);
- }
-
-
- //
- // Renvoie l'etat de l'Integer
- //
- PRIVATE STRPTR StringValue(struct String *str)
- {
- return (str->StringInfo.Buffer);
- }
-
-
- //
- // Modifie l'integer
- //
- PRIVATE VOID ModifyInteger(struct Integer *in, LONG cur, LONG min, LONG max)
- {
- in->MaxInt = max;
- in->MinInt = min;
- in->CurInt = cur;
-
- // mets le cur dans le buffer en ASCII
- sprintf(in->Buffer, "%d", cur);
-
- if (!(in->Flags & OBJ_DISABLED))
- RefreshGList(&in->Gadget, in->window, in->requester, 1L);
- }
-
-
- //
- // Modifie le string
- //
- PRIVATE VOID ModifyString(struct String *str, STRPTR text)
- {
- strcpy(str->StringInfo.Buffer, text);
-
- if (!(str->Flags & OBJ_DISABLED))
- RefreshGList(&str->Gadget, str->window, str->requester, 1L);
- }
-
-
- //
- // gestion de l'IntuiMessage pour le String
- //
- PRIVATE BOOL StringMsg(struct String *str, struct IntuiMessage *msg)
- {
- return (TRUE);
- }
-
-
- //
- // gestion de l'IntuiMessage pour l'Integer
- //
- PRIVATE BOOL IntegerMsg(struct Integer *in, struct IntuiMessage *msg)
- {
- BOOL changed;
-
- // verifie si l'entier est dans l'intervalle
- if ((in->StringInfo.LongInt > in->MaxInt) || (in->StringInfo.LongInt < in->MinInt))
- {
- DisplayBeep(in->window->WScreen);
- ActivateString( (struct String *) in);
- changed = FALSE;
- }
- else
- {
- in->CurInt = in->StringInfo.LongInt;
- changed = TRUE;
- }
- return (changed);
- }
-
-
- //
- // Efface le StringObject
- //
- PRIVATE VOID EraseString(struct String *str)
- {
- EraseObjectFrame( (struct Object *) str, (struct Box *) &str->BorderBox);
- }
-
-
- //
- // Affiche le StringObject
- //
- PRIVATE VOID DisplayString(struct String *str)
- {
- struct RastPort *rp;
- struct TextEnv env;
- UBYTE bord;
-
- if (str->window)
- {
- rp = str->window->RPort;
- bord = (str->ClassFlags & STR_SINGLEBORD) ? BOX_1IN : BOX_2OUT;
-
- SaveTextEnv(str->window->RPort, &env);
- FastDraw3DBox( (struct Box *) &str->BorderBox, rp, bord);
- PrintObjectLabel( (struct Object *) str, (struct Box *) &str->BorderBox);
- RestoreTextEnv(rp, &env);
- RefreshGList(&str->Gadget, str->window, str->requester, 1L);
-
- if (str->Flags & OBJ_DISABLED)
- OffObjectGad( (struct ObjectGad *) str);
- }
- }
-
- //
- // Active un string
- //
- PRIVATE VOID ActivateString(struct String *str)
- {
- if (!(str->Flags & OBJ_DISABLED))
- ActivateGadget(&str->Gadget, str->window, str->requester);
- }
-
-
- //
- // Unghoste un StringObject
- //
- PRIVATE VOID OnStringObject(struct String *str)
- {
- struct RastPort *rp;
-
- if (str->Flags & OBJ_DISABLED)
- {
- rp = str->window->RPort;
-
- OnGadget( &str->Gadget, str->window, str->requester);
- str->Flags &= (~OBJ_DISABLED);
-
- EraseBox( (struct Box *) &str->Gadget.LeftEdge, rp );
- RefreshGList(&str->Gadget, str->window, str->requester, 1L );
- }
- }
-